
package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.shop.bean.app.dto.ShopHeadInfoDto;
import com.yami.shop.bean.model.ShopDetail;
import com.yami.shop.bean.param.AuditingInfoParam;
import com.yami.shop.bean.param.ShopExportParam;
import com.yami.shop.bean.param.ShopSearchParam;
import com.yami.shop.bean.vo.ShopDetailVO;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @author LGH
 */
public interface ShopDetailMapper extends BaseMapper<ShopDetail> {

    /**
     * 根据店铺的手机号（登陆账号），获取店铺信息
     *
     * @param mobile 手机号
     * @return 店铺信息
     */
    ShopDetail getShopByMobile(@Param("mobile") String mobile);

    /**
     * 修改用户密码
     *
     * @param username    用户名称/账号
     * @param newPassword 新密码
     */
    void updatePasswordByUserName(@Param("username") String username, @Param("newPassword") String newPassword);

    /**
     * 获取用户店铺信息
     *
     * @param userId 用户id
     * @return 店铺信息
     */
    ShopDetail getShopDetailByUserId(@Param("userId") String userId);

    /**
     * 根据新生用户id获取店铺信息
     *
     * @param shopXsUserId 新生用户id
     * @return 店铺信息
     */
    ShopDetail getShopDetailByXsUserId(@Param("shopXsUserId") String shopXsUserId);


    /**
     * 修改店铺状态
     *
     * @param shopId 店铺id
     * @param status 状态
     */
    void updateStatus(@Param("shopId") Long shopId, @Param("status") Integer status);

    /**
     * 热搜店铺信息列表
     *
     * @return 热搜店铺信息列表
     */
    List<ShopHeadInfoDto> listHotShopsHead();

    /**
     * 通过经纬度获取距离
     *
     * @param lat    纬度
     * @param lng    经度
     * @param shopId 店铺id
     * @return 距离
     */
    double getDistance(@Param("lat") Double lat, @Param("lng") Double lng, @Param("shopId") Long shopId);

    /**
     * 条件查询，分页获取店铺头部信息
     *
     * @param page            分页参数
     * @param shopHeadInfoDto 条件参数
     * @return 分页店铺头部信息
     */
    Page<ShopHeadInfoDto> searchShops(@Param("page") PageParam<ShopHeadInfoDto> page, @Param("shopHeadInfoDto") ShopHeadInfoDto shopHeadInfoDto);

    /**
     * 获取店铺详情
     *
     * @param shopId 店铺id
     * @return 店铺信息
     */
    ShopDetail selectShopDetailById(@Param("shopId") Long shopId);

    /**
     * 根据店铺id更新密码和手机号
     *
     * @param shopDetail 店铺信息
     */
    void updatePassWordAndMobile(@Param("shopDetail") ShopDetail shopDetail);

    /**
     * 批量修改店铺类型
     *
     * @param shopIds 店铺id
     * @param type    店铺类型
     * @return 修改行数
     */
    int batchUpdateShopType(@Param("shopIds") List<Long> shopIds, @Param("type") Integer type);

    /**
     * 根据当前时间获取状态需要改变为停业状态的店铺id列表
     *
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToStopByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为营业状态的店铺id列表
     *
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToOpenByContractTime(@Param("now") Date now);

    /**
     * 批量改变店铺状态
     *
     * @param shopIds
     * @param oldStatus
     * @param newStatus
     */
    void batchUpdateShopStatusByShopIds(@Param("shopIds") List<Long> shopIds, @Param("oldStatus") Integer oldStatus, @Param("newStatus") Integer newStatus);

    /**
     * 根据搜索参数获取导出的店铺列表
     *
     * @param auditingInfoParam
     * @return
     */
    List<ShopExportParam> listExportByShopParam(@Param("auditingInfoParam") AuditingInfoParam auditingInfoParam);

    /**
     * 分页获取店铺列表（营业、停业状态）
     *
     * @param page
     * @param shopSearchParam
     * @return
     */
    IPage<ShopHeadInfoDto> renovationShopPage(PageParam<ShopDetail> page, @Param("shopSearchParam") ShopSearchParam shopSearchParam);

    /**
     * 店铺列表（营业、停业状态）
     *
     * @param shopSearchParam
     * @return
     */
    List<ShopHeadInfoDto> listRenovationShop(@Param("shopSearchParam") ShopSearchParam shopSearchParam);

    /**
     * 根据店铺ids获取店铺详情列表
     * @param shopIds
     * @return
     */
    List<ShopDetail> getShopDetailByShopIds(@Param("shopIds") List<Long> shopIds);

    /**
     * 批量修改店铺评分
     * @param shopScoreList
     */
    void batchUpdateShopScore(@Param("shopScoreList") List<ShopDetailVO> shopScoreList);

    /**
     * 功能描述: 获取开启数据同步店铺
     * @Author: LSR
     * @Date: 2023/4/3 15:47
     */
    List<ShopDetail> getSynchronizationDataList();

    ShopDetail getShopDetailByShopCode(@Param("shopCode")String shopCode);

    /**
     * 功能描述: 编码转换
     * @Author: LSR
     * @Date: 2023/5/29 16:42
     */
    HashMap<String,String> getChannelMap();


    List<String> getAllShopShortNameList();
}
